# -!- coding: utf-8 -!-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：baidu_image_classify.py
#日期：2019-09-18
#备注：Python利用百度AI进行百度图像识别服务, 需要先安装python SDK   pip install baidu-aip
    https://cloud.baidu.com/doc/IMAGERECOGNITION/index.html
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

from aip import AipImageClassify
from file_deal import get_file
from deal_json import dict_to_json

# 定义常量
APP_ID = '17270563'
API_KEY = 'FUeHzMeqTBCKVEZB1196vBLG'
SECRET_KEY = 'd8lvYSzBB4Lf9Hy7f9I93SZy9Ldnwr9X'

client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)


# 该请求用于通用物体及场景识别，即对于输入的一张图片（可正常解码，且长宽比适宜），输出图片中的多个物体及场景标签。
def advanced_general(file):
    image = get_file(file)          # 图像数据，base64编码，要求base64编码后大小不超过4M，最短边至少15px，最长边最大4096px,支持jpg/png/bmp格式
    options = {}
    options["baike_num"] = 5
    temp = client.advancedGeneral(image, options)
    dict_to_json(temp)              # 返回：baike_info-对应识别结果的百科词条信息, keyword-图片中的物体或场景名称,root-识别结果的上层标签，有部分钱币、动漫、烟酒等tag无上层标签


# 该请求用于菜品识别,输出图片的菜品名称、卡路里信息、置信度
def dish_detect(file):
    image = get_file(file)          # 图像数据，base64编码，要求base64编码后大小不超过4M，最短边至少15px，最长边最大4096px,支持jpg/png/bmp格式
    options = {}
    options["top_num"] = 3                # 返回预测得分top结果数，默认为5
    options["filter_threshold"] = "0.7"   # 默认0.95，可以通过该参数调节识别效果，降低非菜识别率.
    options["baike_num"] = 5              # 返回百科信息的结果数
    temp = client.dishDetect(image, options)
    dict_to_json(temp)


# 该请求用于检测一张车辆图片的具体车型。即对于输入的一张图片（可正常解码，且长宽比适宜），输出图片的车辆品牌及型号。
def car_detect(file):
    image = get_file(file)
    options = {}
    options["baike_num"] = 5
    temp = client.carDetect(image, options)
    dict_to_json(temp)


# 该请求用于识别一张图片。即对于输入的一张图片（可正常解码，且长宽比适宜），输出动物识别结果
def animal_detect(file):
    image = get_file(file)
    options = {}
    options["baike_num"] = 5
    temp = client.animalDetect(image, options)
    dict_to_json(temp)


# 该请求用于识别一张图片。即对于输入的一张图片（可正常解码，且长宽比适宜），输出植物识别结果
def plant_detect(file):
    image = get_file(file)
    options = {}
    options["baike_num"] = 5
    temp = client.plantDetect(image, options)
    dict_to_json(temp)


# 用户向服务请求检测图像中的主体位置。
def object_detect(file):
    image = get_file(file)
    options = {}
    options["with_face"] = 1        # 如果检测主体是人，主体区域是否带上人脸部分，默认取1，带人脸,0-不带人脸区域，其他-带人脸区域，裁剪类需求推荐带人脸，检索/识别类需求推荐不带人脸。
    temp = client.objectDetect(image, options)
    dict_to_json(temp)



# 该请求用于识别地标(名胜古迹)，即对于输入的一张图片（可正常解码，且长宽比适宜），输出图片中的地标识别结果。
def land_mark(file):
    image = get_file(file)
    temp = client.landmark(image)
    dict_to_json(temp)


# (无权限)检测用户上传的花卉图片，输出图片的花卉识别结果名称及对应的概率打分。
def flower(file):
    image = get_file(file)
    options = {}
    options["top_num"] = 3
    options["baike_num"] = 5
    temp = client.flower(image,options)
    dict_to_json(temp)



# 该服务用于识别红酒标签，即对于输入的一张图片（可正常解码，长宽比适宜，且酒标清晰可见），
# 输出图片中的红酒名称、国家、产区、酒庄、类型、糖分、葡萄品种、酒品描述等信息。可识别数十万中外常见红酒。
def red_wine(file):
    image = get_file(file)
    options = {}
    options["top_num"] = 3
    options["baike_num"] = 5
    temp = client.redwine(image,options)
    dict_to_json(temp)



if __name__ == '__main__':
    # advanced_general('ocr/lyf.jpg')     # 人物
    #dish_detect('ocr/hsr.jpg')           # 菜
    #car_detect('ocr/car.png')            # 车辆识别
    #animal_detect('ocr/dw.jpg')           # 动物识别
    plant_detect('ocr/1.jpg')         # 植物识别
    #object_detect('ocr/lyf.jpg')          # 主体位置
    #land_mark('ocr/xmy.jpg')              # 识别地标
    #flower('ocr/hua.jpg')                # 花卉识别
    #red_wine('ocr/jiu.png')                # 红酒识别